<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 原型继承  
        // 优点 可以继承父类的属性和方法

        // 构造函数继承
        // 优点 可以把属性继承到自己身上 

        // 组合继承
        // = 原型继承 + 构造函数继承

        function Person(name,age){
            this.name = name;
            this.age = age;
        }

        Person.prototype.sayHello = function(){
            console.log('我是原型继承');
        }

        function Student(gender,...args){
            this.gender = gender;
            Person.call(this,...args); // 构造函数继承


        }

        Student.prototype = new Person(); // 原型继承


        var s1 = new Student('男','张三',18);
        console.log(s1);


        // 把属性 弄到了自己身上
        // 方法弄到了 父类的原型上 

        // 优点 可以继承父类的属性和方法 还把属性弄到自己的身上
        // 缺点 再自己的原型上 多了一套属性

        /* 
        
            Student {gender: '男', name: '张三', age: 18}
age: 18
gender: "男"
name: "张三"
[[Prototype]]: Person
age: undefined   这里是多余的 没啥用 
name: undefined
[[Prototype]]: Object
sayHello: ƒ ()
        
        
        
        
        
        
        */

        
    </script>
</body>
</html>